home *** CD-ROM | disk | FTP | other *** search
/ PC-SIG Library 8 / PC-SIG Library CD-ROM (8th Edition) (1990-04).iso / 201_300 / disk0223 / setp.asm < prev    next >
Encoding:
Assembly Source File  |  1987-01-13  |  7.8 KB  |  206 lines

  1. NAME SETP_MAIN
  2. PAGE 75,132
  3. TITLE SETP.ASM -- PROCEDURE TO SET PAGE LINES AND PERFORATION SKIP
  4. ;
  5. ;
  6. ;        NO STACK SEGMENT
  7. ;
  8. DISPLAY  MACRO     MESSAGE
  9.          MOV       AH,09               ;REQUEST DISPLAY
  10.          MOV       DX,OFFSET MESSAGE   ;GET MESSAGE
  11.          INT       21H                 ;DOS SERVICE TO PRINT
  12.          ENDM
  13. ;
  14. CODE     SEGMENT   PARA PUBLIC 'CODE'
  15.          ASSUME    CS:CODE,DS:CODE,ES:CODE,SS:CODE
  16. ;
  17.          PUBLIC    ASCII,DATE,TIME,ENTRY,SETP
  18.          ORG       100H                ;SETUP FOR .COM FORMAT
  19. ENTRY:   JMP       START
  20. ;
  21. ;        SKIP OVER DATA SEGMENT
  22. ;
  23. SUBTTL   DATA AREA - SKIPPED
  24. ;
  25.          DB        'Time_:##:##'       ;TIME STAMP
  26.          DB        'Date_:--------'    ;DATE STAMP
  27.          DB        'S LEOCE'           ;MARKER
  28. ;
  29. MONTAB   DB        'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'
  30. ;
  31. MSG      DB        'SYSTEM:  Intervention required on LPT1 $'
  32. INFO1    DB        10,13,'LPT1:  Page length set for 11 inches$'
  33. INFO2    DB        10,13,'LPT1:  Perforation skip set to 09 lines$'
  34. INFO3    DB        10,13,'LPT1:  Line printer ready',10,13,'$'
  35. ROWCOL   DW        ?                   ;ROW AND COLUMN FOR CURSOR
  36. CMDLINE  DB        24,27,'9',27,'C',00,11,27,'N',09,27,'2'
  37.          DB        13,'LPT1: SET PAGE LEN=11; LPI=6',09
  38.          DB        'WAITING FOR WORK - ',
  39. ;
  40. ;
  41. DAY      DB        2 DUP ('0')         ;PAD WITH ZEROS WHEN < 10
  42.          DB        ' '                 ;SEPARATOR
  43. MONTH    DB        3 DUP (0)           ;THE MONTH
  44.          DB        ' '
  45. YEAR     DB        4 DUP (0)           ;THE YEAR  - NULL FOR HERE
  46.          DB        2 DUP (20H)         ;2 SPACES FOR SEPARATION
  47. HOUR     DW        '00'
  48.          DB        ':'
  49. MINS     DW        '00'
  50.          DB        ':'
  51. SECS     DW        '00'
  52.          DB        07,13,27,'<',10
  53. MSGLEN   EQU       $-CMDLINE
  54. ;
  55. SUBTTL SETP - PRINTER INIT UTILITY
  56. ;
  57. START:                                 ;FAR AWAY FROM DOS 2.10
  58. SETP     PROC      NEAR                ;A PUBLIC PROC FOR OS USE
  59.          STI                           ;RESTART INTERRUPTS
  60.          CALL      B10TST              ;SEE IF PRINTER IS READY
  61.          CALL      DATE                ;GET DATE OF INIT
  62.          CALL      TIME                ;TIME OF INITIALIZATION
  63.          CALL      C10PRT              ;CALL PRINT ROUTINE
  64.          RET
  65. SETP     ENDP      ;END OF UTILITY DRIVER
  66.                                        ;END OF MAIN CODE
  67. ;
  68. SUBTTL PRINTER TEST ROUTINE
  69. ;
  70. B10TST   PROC      NEAR                ;LOCAL PROCS ARE NEAR BY
  71.          MOV       AH,03               ;FETCH CURSOR POSITION AND SAVE IT
  72.          MOV       BH,00
  73.          INT       10H                 ;BIOS FOR CURSOR SERVICE
  74.          MOV       ROWCOL,DX           ;SAVE THE RETURNED VALUE
  75. B20:
  76.          MOV       AH,02               ;TEST PRINTER STATUS
  77.          MOV       DX,00               ;
  78.          INT       17H                 ;BIOS SERVICE TO TEST DEVICE
  79.          TEST      AH,00101001B        ;SEE IF PRINTER READY ELSE MESSAGE
  80.          JZ        B30                 ;NO - MESSAGE AND EXIT
  81.          CALL      E10MSG              ;PROVIDE MESSAGE
  82.          JMP       B20
  83. B30:
  84.          RET
  85. B10TST   ENDP
  86. ;
  87. C10PRT   PROC      NEAR                ;PROCEDURE TO PRINT
  88.          LEA       SI,CMDLINE          ;GET THE PRINTER COMMANDS
  89.          MOV       CX,MSGLEN           ;NUMBER OF BYTES TO PRINT
  90.          CALL      D10OUT              ;DISPLAY THE LINE
  91.          RET
  92. C10PRT   ENDP
  93. ;
  94. D10OUT   PROC      NEAR                ;PRINT MESSAGE
  95.          MOV       DX,0000             ;PRINTER #0
  96. D20:
  97.          MOV       AH,00               ;REQUEST PRINT
  98.          MOV       AL,[SI]             ;GET CHAR FROM LINE
  99.          INT       17H                 ;BIOS TO PRINT SERVICE
  100.          INC       SI
  101.          LOOP      D20
  102.          DISPLAY   INFO1
  103.          DISPLAY   INFO2
  104.          DISPLAY   INFO3
  105.          RET
  106. D10OUT   ENDP
  107. ;
  108. E10MSG   PROC      NEAR                ;DISPLAY A MESSAGE
  109.          MOV       AH,02               ;REQUEST SET CURSOR FUNCTION
  110.          MOV       BH,00               ;
  111.          MOV       DX,ROWCOL           ;OLD POSITION SAVED
  112.          INT       10H                 ;BIOS FOR DISPLAY SERVICE
  113.          LEA       DX,MSG              ;GET ERROR MESSAGE
  114.          MOV       AH,09H
  115.          INT       21H
  116.          RET
  117. E10MSG   ENDP
  118. ;
  119. COMMENT  * THIS PROCEDURE WRITES THE DOS TIME WITHOUT PROMPTING FOR THE
  120.            NEW TIME LIKE THE DOS TIME COMMAND DOES.  SOMETIMES YOU JUST
  121. -          NEED TO SEE THE TIME, SAY IN A BATCH PROCEDURE WITHOUT ACTUALLY
  122.            RESETTING IT.  DOS MAKES THIS UNCOMFORTABLE
  123.          *
  124. ;
  125. SUBTTL TIME CONVERSION UTILITY
  126. ;
  127. TIME     PROC      NEAR
  128.          PUBLIC    TIME                ;
  129.          MOV       AH,02CH             ;REQUEST DOS FETCH TIME
  130.          INT       21H                 ;
  131.          MOV       AL,CH               ;HOURS - 0..23 IN AL
  132.          CALL      CONVT               ;CONVERT
  133.          MOV       HOUR,'00'           ;BLANK FOR NOW
  134.          ADD       HOUR,AX             ;ASCII ADD
  135.          MOV       AL,CL               ;DO SAME FOR MINUTES
  136.          CALL      CONVT
  137.          MOV       MINS,'00'
  138.          ADD       MINS,AX
  139.          MOV       AL,DH               ;SECONDS
  140.          CALL      CONVT
  141.          MOV       SECS,'00'           ;ASCII ZEROES
  142.          ADD       SECS,AX
  143.          RET
  144. TIME     ENDP
  145. ;
  146. ;
  147. SUBTTL - DATE CONVERSION UTILITY
  148. DATE     PROC      NEAR                ;DATE PROCEDURE
  149.          PUBLIC    DATE                ;MAKE PUBLIC FOR LINKER
  150. ;
  151.          MOV       AH,2AH              ;GET DATE FROM DOS
  152.          INT       21H                 ;RETURN IN CX,DX
  153.          PUSH      CX                  ;SAVE THE CURRENT CONTENTS
  154.          PUSH      DX                  ;SAVE THE WHOLE DATE NOW
  155.          MOV       DI,OFFSET DAY+1     ;THE DAY OF THE MONTH
  156.          SUB       DH,DH               ;ZERO THE HIGH PART OF DX
  157.          MOV       AX,DX               ;THE DAY NUMBER
  158.          SUB       DX,DX               ;ZERO THE DX REGISTER
  159.          CALL      ASCII
  160.          POP       AX                  ;GET THE OLD VALUE BACK FROM STK
  161.          MOV       DI,OFFSET MONTH     ;THE MONTH NUMBER
  162.          MOV       SI,OFFSET MONTAB    ;MONTH TABLE
  163.          SUB       AL,AL               ;GET RID OF DAYS...
  164.          XCHG      AH,AL               ;SWAP POSITIONS FOR CORRECT ADD LEN
  165.          MOV       CX,0003             ;SETUP ADDR IS SI+3*MONTH-3 BYTES
  166.          MUL       CL
  167.          SUB       AX,3
  168.          ADD       SI,AX               ;ADD OFFSET AND MOVE 3 BYTES
  169.          CLD                           ;CLEAR DIRECTION TO FWD
  170. REP      MOVSB                         ;MOVE STRING BYTES
  171.          MOV       DI,OFFSET YEAR+3
  172.          POP       AX
  173.          SUB       DX,DX
  174.          CALL      ASCII
  175.          RET                           ;BACK TO CALLER
  176. DATE     ENDP
  177. ;
  178. SUBTTL   ASCII CONVERSION ROUTINE
  179. ;
  180. ASCII    PROC      NEAR                ;CONVERT
  181.          MOV       BX,0AH              ;DIVISOR
  182.          MOV       CL,30H              ;CONVERSION FACTOR FOR ASCII
  183. RPT1:
  184.          XOR       DX,DX
  185.          DIV       BX                  ;CLEAR DX
  186.          OR        DL,CL
  187.          MOV       [DI],DL
  188.          DEC       DI                  ;GET NEXT CHAR
  189.          CMP       AX,0                ;DONE YET?
  190.          JNZ       RPT1                ;NO - MORE
  191.          RET                           ;YES - QUIT
  192. ASCII    ENDP
  193. ;
  194. CONVT    PROC      NEAR
  195.          PUBLIC    CONVT               ;CONVERT THE TIME SEGMENTS
  196.          PUSH      CX
  197.          XOR       AH,AH               ;
  198.          MOV       CL,10               ;DIVISOR FOR ASCII ADJUST
  199.          DIV       CL
  200.          POP       CX                  ;RESTORE OLD VALUES
  201.          RET                           ;DONE
  202. CONVT    ENDP
  203. ;
  204. CODE     ENDS
  205.          END       ENTRY
  206.